﻿Imports FuncClasses

''' <summary>
''' Schnittstelle zur Erstellung eines eigenen PlugIns
''' </summary>
''' <remarks>Diese Schnittstelle (Interface) ist die Voraussetzung für das PlugIn, damit das Hauptprogramm es auch als solches erkennt</remarks>
Public Interface IPlugIn
    ''' <summary>
    ''' Repräsentiert den Namen des PlugIns.
    ''' </summary>
    ''' <value>String</value>
    ''' <returns>Gibt den Namen des aktuellen PlugIns zurück</returns>
    ''' <remarks>Das komplette PlugIn wird während der Laufzeit nur über diesen Namen ausgewählt. Er sollte demnach nicht gleich dem eines bereits existierendem PlugIns sein.</remarks>
    ReadOnly Property Name As String

    ''' <summary>
    ''' Repräsentiert die Versionsnummer des aktuellen PlugIns.
    ''' </summary>
    ''' <value>Decimal</value>
    ''' <returns>Gibt die aktuelle Versionsnummer als Decimal zurück.</returns>
    ''' <remarks>Diese Eigenschaft wird momentan nicht vom Hauptprogramm benutzt.</remarks>
    ReadOnly Property Version As Decimal

    ''' <summary>
    ''' Repräsentiert den Autor des PlugIns.
    ''' </summary>
    ''' <value>String</value>
    ''' <returns>Gibt einen String zurück, der den Autor des PlugIns enthält.</returns>
    ''' <remarks>Diese Eigenschaft wird momentan nicht vom Hauptprogramm benutzt</remarks>
    ReadOnly Property Author As String

    ''' <summary>
    ''' Repräsentiert den aktuellen Zustand des PlugIns.
    ''' </summary>
    ''' <value>Boolean</value>
    ''' <returns>Gibt ein Boolean zurück, welcher den aktuellen Zustand des PlugIns wiedergibt.</returns>
    ''' <remarks>Diese Eigenschaft wird zur Laufzeit dafür verwendet, um dem Benutzer des Programms den Zustand des Programms zu zeigen. Es sollte sichergestellt sein, dass bei deaktiviertem Zustand keine Methoden oder Events ausgelöst werden können.</remarks>
    ReadOnly Property IsEnabled As Boolean

    ''' <summary>
    ''' Repräsentiert die aufrufende Instanz von Biller.Window1
    ''' </summary>
    ''' <value>Window1</value>
    ''' <returns>Gibt die aktuelle Instanz von Biller.Window1 zurück</returns>
    ''' <remarks></remarks>
    Property MainWindow As Biller.Window1

    ''' <summary>
    ''' Methode zum Initialisieren des PlugIns
    ''' </summary>
    ''' <remarks></remarks>
    ''' <sample>Testsample</sample>
    Sub Initialize()

    ''' <summary>
    ''' Methode zum Deaktivieren des PlugIns
    ''' </summary>
    ''' <remarks>Das PlugIn darf nach einem Aufruf dieser Methode keine Events abfangen oder andere Methoden starten.</remarks>
    Sub Disable()

    ''' <summary>
    ''' Diese Methode wird aufgerufen, wenn ein neuer Auftrag erstellt oder ein vorhandener Auftrag bearbeitet wird
    ''' </summary>
    ''' <param name="control">Es wird das neue TabControl per Referenz weitergegeben</param>
    ''' <remarks></remarks>
    Sub NewOrderControl(ByRef control As Biller.AuftragControl)

End Interface

Public Interface IPlugIn2
    ''' <summary>
    ''' Repräsentiert den Namen des PlugIns.
    ''' </summary>
    ''' <value>String</value>
    ''' <returns>Gibt den Namen des aktuellen PlugIns zurück</returns>
    ''' <remarks>Das komplette PlugIn wird während der Laufzeit nur über diesen Namen ausgewählt. Er sollte demnach nicht gleich dem eines bereits existierendem PlugIns sein.</remarks>
    ReadOnly Property Name As String

    ''' <summary>
    ''' Repräsentiert die Versionsnummer des aktuellen PlugIns.
    ''' </summary>
    ''' <value>Decimal</value>
    ''' <returns>Gibt die aktuelle Versionsnummer als Decimal zurück.</returns>
    ''' <remarks>Diese Eigenschaft wird momentan nicht vom Hauptprogramm benutzt.</remarks>
    ReadOnly Property Version As Decimal

    ''' <summary>
    ''' Repräsentiert den Autor des PlugIns.
    ''' </summary>
    ''' <value>String</value>
    ''' <returns>Gibt einen String zurück, der den Autor des PlugIns enthält.</returns>
    ''' <remarks>Diese Eigenschaft wird momentan nicht vom Hauptprogramm benutzt</remarks>
    ReadOnly Property Author As String

    ''' <summary>
    ''' Repräsentiert den aktuellen Zustand des PlugIns.
    ''' </summary>
    ''' <value>Boolean</value>
    ''' <returns>Gibt ein Boolean zurück, welcher den aktuellen Zustand des PlugIns wiedergibt.</returns>
    ''' <remarks>Diese Eigenschaft wird zur Laufzeit dafür verwendet, um dem Benutzer des Programms den Zustand des Programms zu zeigen. Es sollte sichergestellt sein, dass bei deaktiviertem Zustand keine Methoden oder Events ausgelöst werden können.</remarks>
    ReadOnly Property IsEnabled As Boolean

    ''' <summary>
    ''' Methode zum Initialisieren des PlugIns
    ''' </summary>
    ''' <remarks></remarks>
    ''' <sample>Testsample</sample>
    Sub Initialize()

    ''' <summary>
    ''' Methode zum Deaktivieren des PlugIns
    ''' </summary>
    ''' <remarks>Das PlugIn darf nach einem Aufruf dieser Methode keine Events abfangen oder andere Methoden starten.</remarks>
    Sub Disable()

    ''' <summary>
    ''' Unique ID
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    ReadOnly Property GUID As Guid

    ''' <summary>
    ''' Diese Methode wird aufgerufen, wenn ein neuer Auftrag erstellt oder ein vorhandener Auftrag bearbeitet wird
    ''' </summary>
    ''' <param name="control">Es wird das neue TabControl per Referenz weitergegeben</param>
    ''' <remarks></remarks>
    Sub NewOrderControl(ByRef control As Biller.AuftragControl)

    ''' <summary>
    ''' The database instance
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Property Database As IDatabase

    ''' <summary>
    ''' The Userrights the plugin wants to have. The program will show a dialog to the user with the requirements. He can accept or decline
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    ReadOnly Property UserRequest As nHibernate.Models.UserPreviewModel

    Sub SetUser(user As User)
End Interface
